# coding:utf-8
import os
from pathlib import Path


class StaticPathHelper:
    """静态资源路径管理器"""
    
    @staticmethod
    def get_views_static_dir() -> Path:
        """获取views/static目录的Path对象"""
        # 获取views目录的路径
        views_dir = Path(__file__).parent.parent
        # 返回views/static目录的Path对象
        return views_dir / 'statics'
    
    @staticmethod
    def get_html_resource_path(resource_name: str) -> Path:
        """
        获取HTML资源的完整路径
        
        Args:
            resource_name: 资源名称，如 'chart.html' 或 'chart'（会自动添加.html后缀）
            
        Returns:
            Path: HTML资源的完整路径
        """
        if not resource_name.endswith('.html'):
            resource_name += '.html'
        return StaticPathHelper.get_views_static_dir() / 'html' / resource_name
    
    @staticmethod
    def get_json_resource_path(resource_name: str) -> Path:
        """
        获取JSON资源的完整路径
        
        Args:
            resource_name: 资源名称，如 'chart.json' 或 'chart'（会自动添加.json后缀）
            
        Returns:
            Path: JSON资源的完整路径
        """
        if not resource_name.endswith('.json'):
            resource_name += '.json'
        return StaticPathHelper.get_views_static_dir() / 'html' / resource_name
    
    @staticmethod
    def ensure_resource_exists(resource_path: Path) -> bool:
        """
        确保资源文件存在，如果目录不存在则创建目录
        
        Args:
            resource_path: 资源文件路径
            
        Returns:
            bool: 资源是否存在
        """
        # 确保父目录存在
        resource_path.parent.mkdir(parents=True, exist_ok=True)
        return resource_path.exists()
    
    @staticmethod
    def get_image_resource_path(resource_name: str) -> Path:
        """
        获取图片资源的完整路径
        
        Args:
            resource_name: 资源名称，包括扩展名（如 'logo.png'）
            
        Returns:
            Path: 图片资源的完整路径
        """
        return StaticPathHelper.get_views_static_dir() / 'images' / resource_name
    
    @staticmethod
    def get_css_resource_path(resource_name: str) -> Path:
        """
        获取CSS资源的完整路径
        
        Args:
            resource_name: 资源名称，如 'style.css' 或 'style'（会自动添加.css后缀）
            
        Returns:
            Path: CSS资源的完整路径
        """
        if not resource_name.endswith('.css'):
            resource_name += '.css'
        return StaticPathHelper.get_views_static_dir() / 'css' / resource_name
    
    @staticmethod
    def get_js_resource_path(resource_name: str) -> Path:
        """
        获取JavaScript资源的完整路径
        
        Args:
            resource_name: 资源名称，如 'script.js' 或 'script'（会自动添加.js后缀）
            
        Returns:
            Path: JavaScript资源的完整路径
        """
        if not resource_name.endswith('.js'):
            resource_name += '.js'
        return StaticPathHelper.get_views_static_dir() / 'js' / resource_name
    
    @staticmethod
    def get_resource_url(resource_path: Path) -> str:
        """
        获取资源的URL表示形式
        
        Args:
            resource_path: 资源文件路径
            
        Returns:
            str: 资源的URL表示形式
        """
        return f"file:///{resource_path.as_posix()}"
    
    @staticmethod
    def copy_resource(source_path: Path, target_name: str, resource_type: str = 'html') -> Path:
        """
        复制资源文件到静态资源目录
        
        Args:
            source_path: 源文件路径
            target_name: 目标文件名（不包含扩展名）
            resource_type: 资源类型，默认为'html'，可选值：'html', 'json', 'image', 'css', 'js'
            
        Returns:
            Path: 复制后的文件路径
        """
        if resource_type == 'html':
            target_path = StaticPathHelper.get_html_resource_path(target_name)
        elif resource_type == 'json':
            target_path = StaticPathHelper.get_json_resource_path(target_name)
        elif resource_type == 'image':
            target_path = StaticPathHelper.get_image_resource_path(target_name)
        elif resource_type == 'css':
            target_path = StaticPathHelper.get_css_resource_path(target_name)
        elif resource_type == 'js':
            target_path = StaticPathHelper.get_js_resource_path(target_name)
        else:
            raise ValueError(f"不支持的资源类型: {resource_type}")
        
        # 确保目标目录存在
        target_path.parent.mkdir(parents=True, exist_ok=True)
        
        # 复制文件
        import shutil
        shutil.copy2(source_path, target_path)
        
        return target_path 